package lanqiao14;
// 放弃
import java.util.Scanner;


public class D {
	private static int N;
	private static int[] nums;

	public static void main(String[] args) {
		/*
		 *                               最大算式
		 * 给定 n 个非负整数 Ai;,你可以在不改变这些数顺序的
		 * 前提下任意在他们之间插入 +，*，(，)四种符号。
		 * 请问在得到的算式合法的前提下，算式的结果最大可以是多少？
		 * 由于结果很大，你只需要输出答案对 10^9+7 取模的结果即可。
		 */
		Scanner scan = new Scanner(System.in);
		N = scan.nextInt();
		nums = new int[N + 1];
		for (int i = 1; i <= N; i++) {
			nums[i] = scan.nextInt();
		}
		scan.close();
		
		sort();
		long max = 1l;
		for (int i = 1; i < nums.length; i++) {
			if (nums[i] != 0) {
				max *= nums[i];
			}
		}
		
		System.out.println(max % 1000000007);
	}

	// 将数组中的1加到左右两边， 然后变成0不用管
	private static void sort() {
		if (N == 1) {
			return;
		}
		if (nums[1] == 1) {
			nums[2] += 1;
			nums[1] = 0;
		}
		for (int i = 2; i < nums.length - 1; i++) {
			if (nums[i] == 1) {
				if (nums[i - 1] == 2) {
					nums[i - 1] += 1;
				} else if (nums[i - 1] == 0) {
					if (nums[i - 2] <= nums[i + 1]) {
						nums[i - 2]++;
					} else {
						nums[i + 1]++;
					}
				} else if (nums[i + 1] >= nums[i - 1]) {
					nums[i - 1]++;
				} else {
					nums[i + 1]++;
				}
				nums[i] = 0;
			}
		}
		if (nums[N] == 1) {
			for (int i = N - 1; i >= 1; i--) {
				if (nums[i] != 0) {
					nums[i] += 1;
					nums[N] = 0;
					break;
				}
			}
			
		}
	}
	
}